():
()
   
   
Refresh
Loading...

Errors

Typesetting Issues

Other Warnings

Latex Bibtex Sage

Settings

TimeTravel Open File Load All History Revert live version to this Changes Changes    to  
 
WARNING: History viewer for this file type not implemented, so showing underlying raw file instead.

Opening...

$ $$ Ω
Modes Help # Data Control Program $x$ Plots Calculus Linear Graphs Number Theory Rings
#$\vec v$ Control Stats Plots
# Control
Git
Done    Deleted
Empty Trash
Showing 0 tasks.

Loading task list...

Only showing tasks that contain . Showing deleted tasks. Showing completed tasks.
Custom Order
Due / Done
Changed
none
completed
   

Opening...

Copy Jupyter Notebook to your Project... Download
Loading 3D scene... Evaluate to see 3d plot. canvas
%sage
Modes Help # Data Control Program Plots Calculus Linear Graphs Number Theory Rings
xxxxxxxxxx
 
1
  
2
1
#######################################
3
2
### TP2 de Boris Colombari, modifié ###
4
3
#######################################
5
4
6
5
#1.
7
6
(14/11).n(digits=50)
8
7
(18/37).n(digits=50)
9
8
# la période de 14/11 est 27
10
9
# la période de 18/37 est 486
11
10
# voir fichier pdf pour plus de détails
12
1.2727272727272727272727272727272727272727272727273
0.48648648648648648648648648648648648648648648648649
13
  
14
1
#2.
15
2
# si a est premier avec 7, la période de a/7 est 142857, 285714, 428571, 571428, 714285 ou 857142
16
3
print("a/7")
17
4
for i in range(1,7):
18
5
    print (i/7).n(digits=50)
19
6
# si a est premier avec 11, la période de a/11 est 09, 18, 27, 36, 45, 54, 63, 72, 81 ou 90
20
7
print("\na/11")
21
8
for i in range(1,11):
22
9
    print (i/11).n(digits=50)
23
10
# les périodes possibles pour a/21 sont 047619, 095238, 142857 (et leurs ''translatés''), 3 ou 6
24
11
print("\na/21")
25
12
for i in range(1,21):
26
13
    print (i/21).n(digits=50)
27
a/7
0.14285714285714285714285714285714285714285714285714
0.28571428571428571428571428571428571428571428571429
0.42857142857142857142857142857142857142857142857143
0.57142857142857142857142857142857142857142857142857
0.71428571428571428571428571428571428571428571428571
0.85714285714285714285714285714285714285714285714286

a/11
0.090909090909090909090909090909090909090909090909091
0.18181818181818181818181818181818181818181818181818
0.27272727272727272727272727272727272727272727272727
0.36363636363636363636363636363636363636363636363636
0.45454545454545454545454545454545454545454545454545
0.54545454545454545454545454545454545454545454545455
0.63636363636363636363636363636363636363636363636364
0.72727272727272727272727272727272727272727272727273
0.81818181818181818181818181818181818181818181818182
0.90909090909090909090909090909090909090909090909091

a/21
0.047619047619047619047619047619047619047619047619048
0.095238095238095238095238095238095238095238095238095
0.14285714285714285714285714285714285714285714285714
0.19047619047619047619047619047619047619047619047619
0.23809523809523809523809523809523809523809523809524
0.28571428571428571428571428571428571428571428571429
0.33333333333333333333333333333333333333333333333333
0.38095238095238095238095238095238095238095238095238
0.42857142857142857142857142857142857142857142857143
0.47619047619047619047619047619047619047619047619048
0.52380952380952380952380952380952380952380952380952
0.57142857142857142857142857142857142857142857142857
0.61904761904761904761904761904761904761904761904762
0.66666666666666666666666666666666666666666666666667
0.71428571428571428571428571428571428571428571428571
0.76190476190476190476190476190476190476190476190476
0.80952380952380952380952380952380952380952380952381
0.85714285714285714285714285714285714285714285714286
0.90476190476190476190476190476190476190476190476191
0.95238095238095238095238095238095238095238095238095
28
  
29
1
#3.
30
2
def integer_to_dec(n):   # pour passer d'un entier à son développement décimal
31
3
    l=[]
32
4
    r=n
33
5
    while r>0:
34
6
        l=[r%10]+l   # la liste des chiffres est dans l'ordre usuel : 123 -> [1,2,3]
35
7
        r=r//10
36
8
    return l
37
9
38
10
def frac_to_dec(r):
39
11
    if r in QQ:
40
12
        r=abs(r)   # le développement décimal ne tient pas compte du signe de r
41
13
        b=r.denominator()   # on récupère le dénominateur
42
14
        a=ZZ(r*b)   # on récupère le numérateur
43
15
        left=a//b   # left est la partie entière de r
44
16
        c=a-left*b   # on écrit r sous la forme left + c/b avec 0 <= c < b
45
17
        if left==0:
46
18
            left=[0]
47
19
        else:
48
20
            left=integer_to_dec(left)   # on récupère le développement décimal de left
49
21
        p=0
50
22
        while b%2==0:   # on récupère la plus grande puissance de 2 dans b
51
23
            p=p+1
52
24
            b=b//2
53
25
        q=0
54
26
        while b%5==0:   # on récupère la plus grande puissance de 5 dans b
55
27
            q=q+1
56
28
            b=b//5
57
29
        m=max(p,q)
58
30
        c=c*2^(m-p)*5^(m-q)   # on a écrit r = left + 1/10^m * c/b avec b premier avec 10
59
31
        preperiod=c//b   # la prépériode est maintenant la partie entière de c/b
60
32
        c=c-preperiod*b   # on a écrit r = left + prépériode/10^m + 1/10^m * c/b avec 0 <= c < b
61
33
        preperiod=integer_to_dec(preperiod)   # on récupère le développement décimal de la prépériode
62
34
        lpp=len(preperiod)
63
35
        for i in range(m-lpp):
64
36
            preperiod=[0]+preperiod   # on ajoute le nombre de zéros nécessaires devant la prépériode
65
37
        if b==1:
66
38
            period=[0]
67
39
        else:
68
40
            k=1
69
41
            while ((10^k)%b)!=1:   # on récupère la plus petite puissance de 10 telle que b divise 10^k - 1
70
42
                k=k+1
71
43
            period=integer_to_dec(c*(10^k-1)//b)   # la période est alors c * (10^k - 1)/b
72
44
            # on a écrit r = left + prépériode/10^m + 1/10^m * période/(10^k - 1)
73
45
            lper=len(period)
74
46
            for i in range(k-lper):
75
47
                period = [0]+period   # on ajoute le nombre de zéros nécessaires devant la période
76
48
        return left, preperiod, period
77
49
    else:
78
50
        raise ValueError("L'argument doit être un nombre rationnel, sans quoi le développement n'est pas périodique à partir d'un certain rang.")   # si r n'est pas un rationnel, on déclenche une exception
79
51
r=14875/161
80
52
frac_to_dec(r)
81
53
r.n(digits=100)
82
([9, 2], [], [3, 9, 1, 3, 0, 4, 3, 4, 7, 8, 2, 6, 0, 8, 6, 9, 5, 6, 5, 2, 1, 7])
92.39130434782608695652173913043478260869565217391304347826086956521739130434782608695652173913043478
83
  
84
1
frac_to_dec(pi)
85
Error in lines 1-1
Traceback (most recent call last):
  File "/projects/sage/sage-7.3/local/lib/python2.7/site-packages/smc_sagews/sage_server.py", line 968, in execute
    exec compile(block+'\n', '', 'single') in namespace, locals
  File "", line 1, in <module>
  File "", line 40, in frac_to_dec
ValueError: L'argument doit être un nombre rationnel, sans quoi le développement n'est pas périodique à partir d'un certain rang.
86
  
87
1
#5.
88
2
def dec_to_integer(l):   # pour passer du développement décimal à l'entier
89
3
    n=0
90
4
    for k in range(len(l)):
91
5
        n=n+l[k]*10^(len(l)-k-1)
92
6
    return n
93
7
94
8
def dec_to_frac(left,preperiod,period):
95
9
    n = dec_to_integer(left)
96
10
    x = dec_to_integer(preperiod)/10^len(preperiod)
97
11
    y = dec_to_integer(period)/(10^len(preperiod)*(10^len(period)-1))
98
12
    r = n+x+y
99
13
    return r
100
14
101
15
r=dec_to_frac([1,2],[3,7],[1,2,3])
102
16
r
103
17
r.n(digits=20)
104
205981/16650
12.371231231231231231
105
  
106
1
#on teste que les fonctions frac_to_dec et dec_to_frac sont bien inverses l'une de l'autre
107
2
a,b,c = frac_to_dec(37/123)
108
3
dec_to_frac(a,b,c)
109
37/123
110
  
111
1
#6.
112
2
def frac_cont(x,n):
113
3
    a = [floor(x)]
114
4
    for i in range(n):
115
5
        if x > a[i]:
116
6
            x = 1/(x-a[i])
117
7
            a.append(floor(x))
118
8
        else:
119
9
            break   # le calcul s'arrête si la fraction continue est exacte
120
10
    return a
121
11
122
12
frac_cont(1357/72,10)
123
13
continued_fraction(1357/72) #on compare avec la fonction sage faisant la même chose
124
14
frac_cont(pi,10)
125
15
continued_fraction(pi)
126
[18, 1, 5, 1, 1, 5]
[18; 1, 5, 1, 1, 5]
[3, 7, 15, 1, 292, 1, 1, 1, 2, 1, 3]
[3; 7, 15, 1, 292, 1, 1, 1, 2, 1, 3, 1, 14, 2, 1, 1, 2, 2, 2, 2, ...]
127
  
128
129
  
130
1
#7.
131
2
frac_cont(sqrt(2),10)
132
3
# le développement en fraction continue de racine(2) semble être [1,2,2,2,...], ce que l'on vérifie facilement (voir fichier pdf pour plus de détails)
133
4
frac_cont(pi,10)
134
[1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
[3, 7, 15, 1, 292, 1, 1, 1, 2, 1, 3]
135
  
136
1
#8.
137
2
def frac_cont_to_QQ(a):
138
3
    n=len(a)-1
139
4
    h=[0,1]
140
5
    k=[1,0]
141
6
    for i in range(n+1):
142
7
        h.append(a[i]*h[i+1]+h[i])
143
8
        k.append(a[i]*k[i+1]+k[i])
144
9
    return [h[n+2], k[n+2]]
145
10
r=frac_cont_to_QQ([1,2,3,4])
146
11
r=r[0]/r[1]
147
12
r
148
13
frac_cont(r,10) #on vérifie que frac_cont_to_QQ fait bien l'inverse de frac_cont
149
43/30
[1, 2, 3, 4]
150
  
151
1
#9.
152
2
def Hurwitz(x, n):
153
3
    f=frac_cont(x,n)
154
4
    u=[];p=[];q=[];C=[]
155
5
    for i in range(n+1):
156
6
        f=frac_cont_to_QQ(frac_cont(x,i))
157
7
        p.append(f[0])
158
8
        q.append(f[1])
159
9
        u.append(p[i]/q[i])
160
10
        C.append(abs(x-u[i])*q[i]^2)
161
11
    print "u =", u
162
12
    print "p =", p
163
13
    print "q =", q
164
14
    print "C =", C
165
15
    print "C =", [c.n() for c in C]
166
16
    k=[]
167
17
    for i in range(n+1):
168
18
        if C[i]<=1/sqrt(5):   # on liste les indices i pour lesquels C[i] est inférieur à 1/racine(5)
169
19
            k.append(i)
170
20
    return k
171
21
172
22
Hurwitz((1+sqrt(5))/2, 30)
173
u = [1, 2, 3/2, 5/3, 8/5, 13/8, 21/13, 34/21, 55/34, 89/55, 144/89, 233/144, 377/233, 610/377, 987/610, 1597/987, 2584/1597, 4181/2584, 6765/4181, 10946/6765, 17711/10946, 28657/17711, 46368/28657, 75025/46368, 121393/75025, 196418/121393, 317811/196418, 514229/317811, 832040/514229, 1346269/832040, 2178309/1346269]
p = [1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309]
q = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269]
C = [abs(1/2*sqrt(5) - 1/2), abs(1/2*sqrt(5) - 3/2), 4*abs(1/2*sqrt(5) - 1), 9*abs(1/2*sqrt(5) - 7/6), 25*abs(1/2*sqrt(5) - 11/10), 64*abs(1/2*sqrt(5) - 9/8), 169*abs(1/2*sqrt(5) - 29/26), 441*abs(1/2*sqrt(5) - 47/42), 1156*abs(1/2*sqrt(5) - 19/17), 3025*abs(1/2*sqrt(5) - 123/110), 7921*abs(1/2*sqrt(5) - 199/178), 20736*abs(1/2*sqrt(5) - 161/144), 54289*abs(1/2*sqrt(5) - 521/466), 142129*abs(1/2*sqrt(5) - 843/754), 372100*abs(1/2*sqrt(5) - 341/305), 974169*abs(1/2*sqrt(5) - 2207/1974), 2550409*abs(1/2*sqrt(5) - 3571/3194), 6677056*abs(1/2*sqrt(5) - 2889/2584), 17480761*abs(1/2*sqrt(5) - 9349/8362), 45765225*abs(1/2*sqrt(5) - 15127/13530), 119814916*abs(1/2*sqrt(5) - 6119/5473), 313679521*abs(1/2*sqrt(5) - 39603/35422), 821223649*abs(1/2*sqrt(5) - 64079/57314), 2149991424*abs(1/2*sqrt(5) - 51841/46368), 5628750625*abs(1/2*sqrt(5) - 167761/150050), 14736260449*abs(1/2*sqrt(5) - 271443/242786), 38580030724*abs(1/2*sqrt(5) - 109801/98209), 101003831721*abs(1/2*sqrt(5) - 710647/635622), 264431464441*abs(1/2*sqrt(5) - 1149851/1028458), 692290561600*abs(1/2*sqrt(5) - 930249/832040), 1812440220361*abs(1/2*sqrt(5) - 3010349/2692538)]
C = [0.618033988749895, 0.381966011250105, 0.472135954999580, 0.437694101250947, 0.450849718747370, 0.445824720006726, 0.447744098732233, 0.447010961296357, 0.447290994878477, 0.447184031567871, 0.447224887917879, 0.447209282179813, 0.447215243041466, 0.447212966183297, 0.447213835860993, 0.447213503698230, 0.447213630518742, 0.447213581204679, 0.447213603027423, 0.447213586311318, 0.447213600674441, 0.447213590382274, 0.447213717117140, 0.447213625280028, 0.447214247831090, 0.447211969813261, 0.447213489339942, 0.447201476853452, 0.447236573252651, 0.447169688765214, 0.447113698247808]
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29]
174
  
175
1
Hurwitz(pi, 12) #il y a une perte de précision pour les trop grandes valeurs
176
u = [3, 22/7, 333/106, 355/113, 103993/33102, 104348/33215, 208341/66317, 312689/99532, 833719/265381, 1146408/364913, 4272943/1360120, 5419351/1725033, 80143857/25510582]
p = [3, 22, 333, 355, 103993, 104348, 208341, 312689, 833719, 1146408, 4272943, 5419351, 80143857]
q = [1, 7, 106, 113, 33102, 33215, 66317, 99532, 265381, 364913, 1360120, 1725033, 25510582]
C = [abs(pi - 3), 49*abs(pi - 22/7), 11236*abs(pi - 333/106), 12769*abs(pi - 355/113), 1095742404*abs(pi - 103993/33102), 1103236225*abs(pi - 104348/33215), 4397944489*abs(pi - 208341/66317), 9906619024*abs(pi - 312689/99532), 70427075161*abs(pi - 833719/265381), 133161497569*abs(pi - 1146408/364913), 1849926414400*abs(pi - 4272943/1360120), 2975738851089*abs(pi - 5419351/1725033), 650789793978724*abs(pi - 80143857/25510582)]
C = [0.141592653589793, 0.0619599741001342, 0.935055734917052, 0.00340631193451202, 0.633219261856677, 0.365864087195522, 0.538116423198013, 0.288712109086653, 0.613789619145877, 0.214484764030748, 0.747594447283007, 0.0660746757550124, 0.289008725386497]
[0, 1, 3, 5, 7, 9, 11, 12]
177
  
178
1
179
2
180
3
181
4
182
5
183
6
184
7
185
8
186
9
187
10
188
11